由于各种原因(需要同时使用多个仓库平台,例如:github存放一些个人代码和企业gitlab存放公司业务代码; 或者公司内多个内网不同的gitlab平台需要实现项目代码同步),因此经常会遇到我们需要同时访问多个git托管平台。手动拷贝粘贴变动文件显然是不符合我们慵懒策略的,可以自动通过不同的域名(IP)调取对应的密钥进行数据的访问,git仓库实现多远程仓库配置实现本地单仓库管理多远程仓库的功能,极大的提高我们的效率。为了满足业务场景,查了一些方案,在此进行记录。
remote
因为关注到remote,可能大多数人已经有了多远程仓库的配置需求,所以在这里先介绍多仓库的配置,在补充介绍其他相关命令
常用命令
查看远程仓库配置
1 | git remote # 查看所有远程仓库的别名: |
添加远程仓库
1 | 添加远程仓库 |
多仓库的配置
因为本文主要是针对多仓库,所以全局配置显然已经不合适了,多仓库的账号往往不互通,所以首先我们再本地进行多个账号的配置。
配置多个账号
首先针对我们每个不同的托管平台账号生成各自的密钥信息。以gitlab & github为例。
1
2
3ssh-keygen -t rsa -f ~/.ssh/id_rsa_gitlab -C "gitlab@account"
ssh-keygen -t rsa -f ~/.ssh/id_rsa_github -C "github@account"生成密钥后,在密钥存储目录创建~/.ssh/config文件并进行相关信息的记录,config文件格式如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17github
host 与 hostname 需要相同
Host github.com
HostName github.com
你的github账号
User github@account
github对应的rsa秘钥文件
IdentityFile ~/.ssh/id_rsa_github
gitlab
host 与 hostname 需要相同
Host gitlab.genomics.cn
HostName gitlab.genomics.cn
你的gitlab账号
User gitlab@account
gitlab对应的rsa秘钥文件
IdentityFile ~/.ssh/id_rsa_gitlab
完成上述步骤后,分别将不同托管平台对应生成的秘钥文件信息添加到对应平台中,例如:
gitlab中添加方式: Edit profile ==> SSH key ==> Add an SSH key ;
github中添加方式:Settings ==> SSH and GPG keys ==> New SSH key。
然后就可以直接对多个不同托管平台的数据进行操作,而不用每个仓库单独配置账号和权限了。
仓库远程关联
弱关联配置
所谓弱关联,其实就是本地和远程代码不是强相关,可以指定代码推送到那个远程仓库,不同的远程仓库代码也可能存在版本差异,这样会有更多的可操作性,自由度和安全度也更高。
1 | git remote -v # 查看关联的远程仓库 |
其实以前用git 经常看到origin,但是直到现在才知道origin 是默认的远程仓库别名,所以可以随意添加远程仓库并起别名进行区分,例如:gitlab。
强关联配置
但是显而易见的,弱关联请胯下,我们每次 push 都需手动指定远程仓库,显得比较麻烦.有写项目,仓库我仅仅需要一次操作同步至 github 和 gitlab 即可, 只可以多仓库同步推送,但是不能多仓库同步拉取流程,当然也可能是为了规避可能的代码冲突。
1 | git remote set-url --add <name> <url> 为当前仓库添加额外的远程地址 |
当然如果我们默认拉取的仓库不是origin的仓库,我们也可以更改remote的默认(origin)配置,默认每个remote的第一个配置的远程仓库是由拉取权限的,后续添加的仓库可以推送。